package com.dayuanit.dy15.lesson25.demo1;

public class Test {

    public static void a() {
        System.out.println("a()");
        b();
        System.out.println("a() over");
    }

    public static void b() {
        System.out.println("b()");

        int num = 9 / 0;//抛异常

        System.out.println("b() over");

//        Exception in thread "main" java.lang.ArithmeticException: / by zero
//        at com.dayuanit.dy15.lesson25.demo1.Test.b(Test.java:14)
//        at com.dayuanit.dy15.lesson25.demo1.Test.a(Test.java:7)
//        at com.dayuanit.dy15.lesson25.demo1.Test.main(Test.java:29)
    }

    public static void main(String[] args) throws Exception {
        //异常
        //编译时期的错误 运行期的异常

//        int a = true;

//        int num = 9 / 10;

        //异常栈 包括：当前线程的名字、异常类的名字、异常描述、方法栈；处于方法栈的顶端，就是异常发生的地方
//        Exception in thread "main" java.lang.ArithmeticException: / by zero
//        at com.dayuanit.dy15.lesson25.demo1.Test.main(Test.java:11)

        //什么时候使用try catch，当前方法如果能够处理这个异常，那么就可以try catch,反之，就直接抛给它的上一级方法。
        try {
            Test.a();
        } catch (Exception e) {
            System.out.println("catch exception");
            e.printStackTrace();//打印异常栈信息
        }

        System.out.println("main over");

        //如果异常抛给了虚拟机，那么整个JVM就退出了。

        //异常信息栈很重要，我们在解决项目bug的时候，很多问题都要靠异常栈信息帮助我们定位问题。
        //一旦丢失了异常栈信息，后果很严重，老板很生气。
    }
}
